#!/usr/bin/bash  
##########################################################################
#脚本名称：     sftp_filesend.sh [ free ]
#脚本功能：     通过sft_pfree_filesend.sh将指定本地文件目录下的文件传输到SFTP目录下
#脚本调用：     sh sftp_filesend.sh <BizDate> <SFTP_IP> <SFTP_PORT> <SFTP_USER> <PASSWORD> <SFTP_Dir> <SFTP_FileName> <Local_Dir> <Local_File> 
#脚本参数：
#    <ETL_DT>               日期必须为YYYYMMDD
#    <CHECKTIMES>           检查 (占位)
#    <SFTP_IP>              SFTP服务器IP
#    <SFTP_USER>            SFTP服务器用户
#    PASSWORD=${5}          #定义密码(占位)
#    <SFTP_Dir>             SFTP目录
#    <SFTP_FileName>        SFTP文件名
#    <Local_Dir>            本地文件目录
#    <Local_File>           本地文件名
#输出文件：
#使用实例：     见下方_Help()函数
#编 写 人：     Adtec
#编写日期：     2025/02/24
#修改时间：
#修改内容：
##########################################################################
#定义
ShellName=sftp_filesend
ShellDir=$(cd `dirname $0` ; pwd)
SFTP_IP1=10.192.81.222
ETL_DT=$1              #日期必须为YYYYMMDD
CHECKTIMES=$2          #检查 (占位)
SFTP_IP=${3}           #定义目标机器IP
SFTP_USER=${4}         #定义用户名
PASSWORD=${5}          #定义密码(占位)
SFTP_Dir=${6}          #定义远程目录
SFTP_FileName=${7}     #定义远程文件名
Local_Dir=${8}         #定义源目录
Local_File=${9}        #定义源文件

SFTP_PORT=22           #定义端口
CFG_Dir=${ShellDir}/logs/${ETL_DT}
SEND_FILE_CFG=${ShellDir}/logs/${ETL_DT}/sftp_send_file.cfg$$
Clear_DT=`date -d "-3 days" +'%Y%m%d'`
#--------------User Function--------------
#函数功能:  打印运行方式
#
_Help()
{
cat <<!

Shell用法
     sh sftp_filesend.sh <ETL_DT> <CheckTimes> <FTP_IP> <FTP_User> <FTP_PassWord> <FTP_Patch> <FileName> [BasePatch] [BaseFileName]
exp
     sh sftp_filesend.sh 20130728 1 10.10.10.24 ods ods /home/ods/bin/odsftp odsftp.sh /home/ods/tmp ods_filecheck.tmp
参数用法
    <ETL_DT>          日期必须为YYYYMMDD
    <CHECKTIMES>      检查(占位)
    <SFTP_IP>         SFTP 服务器IP
    <SFTP_USER>       SFTP 服务器用户
    <FTP_PassWord>    SFTP 服务器密码(占位)
    <SFTP_Dir>        SFTP 上传目录
    <SFTP_FileName>   上传文件名
    [Local_Dir]       本地文件目录
    [Local_File]      本地文件名称

!

exit 21
}

####核验参数&日期
if [ $# -eq 9 ] && [ ${#1} -eq 8 ]
  then
   BizDate=$1
   BizYear=`expr substr $BizDate 1 4 + 0`
   BizMon=`expr substr $BizDate 5 2 + 0`
   BizDay=`expr substr $BizDate 7 2 + 0`
   res=`cal $BizMon $BizYear 2>>/dev/null | sed '/[A-Za-z]/'d |grep -w $BizDay |wc -l `
   if [ $res -ne 1 ]
     then
      echo "`date +%Y%m%d%H%M%S` [ ERROR ]: 日期[ $BizDate ]校验失败,日期不存在!"
      _Help
   fi
else
   echo "`date +%Y%m%d%H%M%S` [ ERROR ]:参数个数或日期位数不正确!"
   _Help
fi

#验证本地文件是否存在
if [ ! -f ${Local_Dir}/${Local_File} ]
  then
    echo "`date +%Y%m%d%H%M%S` 本地文件[ ${Local_Dir}/${Local_File} ]不存在,请核查本地文件!!!"
    exit 299
fi

#
if [ ! -d ${CFG_Dir} ]
  then
  mkdir -p ${CFG_Dir}  >>/dev/null
fi

echo "`date +%Y%m%d%H%M%S` 执行参数:[ sh ${ShellDir}/${ShellName}.sh ${1} ${2} ${3} ${4} ******** ${6} ${7} ${8} ${9} ]"

#---------------Main-----------------
#创建传输配置文件
CREATE_SEND_FILE_CFG(){

echo "cd ${SFTP_Dir}" > ${SEND_FILE_CFG}
echo "put ${Local_Dir}/${Local_File} ${SFTP_Dir}/ " >>${SEND_FILE_CFG}
echo "chmod 775 ${SFTP_Dir}/*.*" >>${SEND_FILE_CFG}
echo "bye" >>${SEND_FILE_CFG}

}

SEND_FILE(){
###获取传输文件配置
CREATE_SEND_FILE_CFG

###执行传输
echo "`date +%Y%m%d%H%M%S` 开始传输文件 [ ${Local_Dir}/${Local_File} ]"
echo "`date +%Y%m%d%H%M%S` 目标信息 [ ${SFTP_IP1} ${SFTP_USER} ${SFTP_Dir}/ ] "
EXEC_SFTP=`sftp -oPort=${SFTP_PORT} -b ${SEND_FILE_CFG} ${SFTP_USER}@${SFTP_IP1}`
if [ $? -ne 0 ]
  then
    echo "${EXEC_SFTP}"
    echo "`date +%Y%m%d%H%M%S` sftp传输文件失败!!!"
    exit 300
else
    echo "`date +%Y%m%d%H%M%S` 本地文件 [ ${Local_Dir}/${Local_File} ] 传输完毕!"
fi

}

###执行传输文件
SEND_FILE
####清理临时配置文件
rm -f ${SEND_FILE_CFG} >>/dev/null
####清理临时配置文件目录
if [ ! -d ${ShellDir}/logs/${Clear_DT} ]
  then
     echo ""
else 
    cd ${ShellDir}/logs
  ###清理文件
    rm -f ${Clear_DT}/*.cfg* >>/dev/null
  ###清理目录
    rm -r ${Clear_DT} >>/dev/null
fi